package task;

import app.FileMeta;
import callback.FileScannerCallBack;
import lombok.Getter;

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author yuisama
 * @date 2022/07/09 11:29
 * 进行文件扫描任务
 **/
@Getter
public class FileScanner {
    // 当前扫描的文件个数
    private int fileNum;
    // 当前扫描的文件夹个数
    // 最开始扫描的根路径没有统计，因此初始化文件夹的个数为1，表示从根目录下开始进行扫描任务
    private int dirNum = 1;

    // 文件扫描回调对象
    private FileScannerCallBack callBack;

    public FileScanner(FileScannerCallBack callBack) {
        this.callBack = callBack;
    }

    /**
     * 根据传入的文件夹进行扫描任务
     * @param filePath 要扫描的文件夹
     */
    public void scan(File filePath) {
        // 终止条件
        if (filePath == null) {
            return;
        }
        // 使用回调函数，将当前目录下的所有内容保存到指定终端
        this.callBack.callback(filePath);
        // 先将当前这一级目录下的file对象获取出来
        File[] files = filePath.listFiles();
        // 遍历这些file对象，根据是否是文件夹进行区别处理
        for (File file : files) {

            if (file.isDirectory()) {
                // 是个文件夹，需要递归扫描
                dirNum ++;
                scan(file);//对文件夹里面的内容进行递归出来
            }else {
                // 是个文件
                fileNum ++;
            }
        }
    }

}
